package com.company.dcm.server.protocol;

import com.company.dcm.server.protocol.enums.ProtocolMessageTypeEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @Author: 王泽同
 * @Description:
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProtocolMessage {
    /**
     * 消息头
     */
    private Header header;

    /**
    * 消息体(请求或响应对象)
    */
    private List<ProtocolTask> body;

    /**
     * 消息尾
     */
    private Tail tail;

    /**
    *协议消息头
    */
    @Data
    public static class Header{
        /**
         * 魔数，帧头，保证信息安全性(默认为 ‘#’ ASCII 35)
         */
        private byte startMagic;

        /**
         * 协议版本
         */
        private byte version;

        /**
         * 帧长度 (两字节，不含符号位)
         */
        private int length;

        /**
         * 帧类型
         * 0x01	信息包
         * 0x02	大数据包
         * 0x03	OTA包
         * 0x04	数据透传包
         */
        private ProtocolMessageTypeEnum type;
    }

    /**
     *协议消息尾
     */
    @Data
    public static class Tail{
        /**
         * CRC16校验，为0x00 0x00：没开启校验功能 (两字节，不含符号位)
         */
        private short parity;

        /**
         * 魔数，帧尾，保证信息安全性(默认为 ‘$’ ASCII 36)
         */
        private byte endMagic;
    }
}
